import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:经典场景
 * User: lenovo
 * Date: 2023-02-22
 * Time: 18:49
 */
public class Test {
    /**
     *
     * @param array
     */
    //把10w个数字里重复的数字都去掉
    //使用set
    private static void fun1(int[] array){
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            set.add(array[i]);
        }
        System.out.println(set);


    }

    /**
     *
     * @param array
     */
    //给定十万个数据,找到10w个数据当中第一个重复的数据
    //还是使用set,边放边检查,如果下一个要放进set集合里的数字是集合里本来就存在的,那么这个数字就是第一个存在的数字
    private static void fun2(int[] array){
//        Set<Integer> set = new HashSet<>();
//        int i = 0;
//        for (; i < array.length; i++) {
//            if(set.contains(array[i])){
//                break;
//            }
//            set.add(array[i]);
//
//        }
//        if (i < array.length){
//            System.out.println(array[i]);
//            //循环走完了,说明不存在重复的数字
//        }else {
//            System.out.println("不存在重复的数字");
//        }
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            if(set.contains(array[i])){
                System.out.println("第一个重复的数字:"+array[i]);
                return;
            }
            set.add(array[i]);
        }
        System.out.println("不存在重复的数字");

    }

    /**
     * 统计10w个数据中每个数据出现的次数
     * 使用map
     * @param
     */
    private static void fun3(int[] array){
//        Map<Integer,Integer> map = new HashMap<>();
//        //统计每个数字出现的次数
//        for (int i = 0; i < array.length; i++) {
//            //如果不存在key,就将key:value=1添加到map里
//           if(!map.containsKey(array[i])){
//               map.put(array[i],1);
//           }else {
//               //如果存在,就先将key对应的value值取出来,再将key对应value值更新
//              int value =  map.get(array[i]);
//              value+=1;
//              map.put(array[i],value);
//           }
//
//        }
//        //遍历map,将map里的数据都打印出来
//        Set<Map.Entry<Integer,Integer>> entrySet = map.entrySet();
//        for (Map.Entry<Integer,Integer> entry: entrySet) {
//            System.out.println("key:"+entry.getKey() + " value:"+entry.getValue());
//
//        }
        Map<Integer,Integer> map =new HashMap<>();
        for (int i = 0; i < array.length; i++) {
            //不存在key,value的值将为-1
            int value = map.getOrDefault(array[i],-1);
            if(value== -1){
                map.put(array[i],1);
            }else{
                map.put(array[i],value+1);

            }

        }
        //遍历map,将map里的数据都打印出来
        Set<Map.Entry<Integer,Integer>> entrySet = map.entrySet();
        for (Map.Entry<Integer,Integer> entry: entrySet) {
            System.out.println("key:"+entry.getKey() + " value:"+entry.getValue());

        }


    }
    public static void main(String[] args) {
            int[] array = new int[10];
            //产生随机数
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            //随机数的范围是0-4999
            array[i] = random.nextInt(10);
        }
        System.out.println("完整数组:"+Arrays.toString(array));
        //fun1(array);
        //fun2(array);
        fun3(array);
    }
}
